@echo off
chcp 65001 >nul
title Builder.Alyr.Net 智能依赖安装器

echo ================================================
echo  Builder.Alyr.Net 智能依赖安装器
echo  (c) 2020-2025 ALYR.NET
echo ================================================
echo.

echo 🔍 检测重复安装进程...
tasklist | findstr /i "npm.exe node.exe" >nul
if %errorlevel% equ 0 (
    echo ⚠️  检测到正在运行的安装进程！
    echo 🛑 强制停止所有相关进程...
    taskkill /f /im node.exe >nul 2>&1
    taskkill /f /im npm.exe >nul 2>&1
    taskkill /f /im yarn.exe >nul 2>&1
    taskkill /f /im pnpm.exe >nul 2>&1
    echo ✅ 进程清理完成
    timeout /t 3 >nul
) else (
    echo ✅ 未检测到冲突进程
)

echo 🔧 执行安全清理...
taskkill /f /im node.exe >nul 2>&1
taskkill /f /im npm.exe >nul 2>&1
timeout /t 2 >nul

echo 🔒 检查安装锁定状态...
if exist ".install.lock" (
    echo ⚠️  检测到安装锁定文件！
    echo 🛑 强制解除锁定并清理残留进程...
    del ".install.lock" >nul 2>&1
    taskkill /f /im node.exe >nul 2>&1
    taskkill /f /im npm.exe >nul 2>&1
    echo ✅ 锁定已解除
)

echo 🔍 正在安装项目依赖...
echo.

cd /d "%~dp0"

echo 🔒 创建安装锁定...
echo %date% %time% > ".install.lock"

echo 📦 开始执行依赖安装...
echo ⏱️  使用快速安装模式...

:: 使用更激进的参数避免卡顿
npm install --no-optional --prefer-offline --no-audit --no-fund --silent --timeout=30000

if %errorlevel% neq 0 (
    echo.
    echo ❌ 依赖安装失败！
    echo 🛑 强制清理可能的残留进程...
    taskkill /f /im node.exe >nul 2>&1
    taskkill /f /im npm.exe >nul 2>&1
    echo 💡 可能的解决方案：
    echo    1. 检查网络连接
    echo    2. 清理 npm 缓存：npm cache clean --force
    echo    3. 删除 node_modules 文件夹后重试
    echo    4. 尝试使用：npm install --registry https://registry.npmmirror.com
    echo.
    del ".install.lock" >nul 2>&1
    goto end
)

echo 🔓 移除安装锁定...
del ".install.lock" >nul 2>&1

echo.
echo ✅ 依赖安装完成！
echo 📊 安装统计：
for /f %%i in ('dir /b /ad node_modules 2^>nul ^| find /c /v ""') do echo    已安装 %%i+ 个核心依赖包
if exist "node_modules" (
    echo    ✓ node_modules 目录已创建
) else (
    echo    ✗ node_modules 目录创建失败
)
echo.
echo 🚀 项目启动命令：
echo    npm start          # 启动开发服务器
echo    npm run build      # 构建生产版本
echo    npm test           # 运行测试
echo.

:end
echo 批处理已完成，窗口将自动关闭...
timeout /t 3 >nul